// 导入数据库操作模块
const db = require("../db/index");

// 导入处理路径的 path 核心模块
const path = require("path");

const fs = require("fs");

const axios = require('axios');
const cheerio = require('cheerio');

//根据网址查询该网站数据的处理函数
// exports.getData = (req, res) => {
//   const siteUrl = req.query.url;
//     if (!siteUrl) res.status(400).send('缺少url参数');

//     axios.get(siteUrl)
//     .then((response) => {
//         const html = response.data;
//         const $ = cheerio.load(html);
//         const title = $('title').text();
//         const description = $('meta[name="description"]').attr('content');
//         const favicon = $('link[rel="shortcut icon"]').attr('href') || $('link[rel="icon"]').attr('href');
//         const urlObj = new URL(favicon || '', siteUrl);
//         const faviconUrl = urlObj.href;

//             res.send({
//                 status: 0,
//                 message: '获取成功',
                
//                 title: title,
//                 content: description,
//                 logoImg: faviconUrl,
//                 url: siteUrl 
//             })
//         })
//         .catch((error) => {
//           console.error(error);
//           res.status(500).send(error.message);
//       });
// };



// 根据网址查询该网站数据的处理函数
exports.getData = (req, res) => {
  const siteUrl = req.query.url;
  
  if (!siteUrl) return res.status(400).send('缺少url参数');

  // 先通过 axios 抓取数据
  axios.get(siteUrl)
    .then((response) => {
      const html = response.data;
      const $ = cheerio.load(html);
      const title = $('title').text();
      const description = $('meta[name="description"]').attr('content');
      const favicon = $('link[rel="shortcut icon"]').attr('href') || $('link[rel="icon"]').attr('href');
      const urlObj = new URL(favicon || '', siteUrl);
      const faviconUrl = urlObj.href;

      // 检查抓取的内容，如果内容缺失，则去数据库查找
      if (!title && !description && !favicon) {
        return fetchFromDatabase(siteUrl, res);
      }

      // 如果抓取到了数据，返回结果
      res.send({
        status: 0,
        message: '获取成功',
        title: title,
        content: description,
        logoImg: faviconUrl,
        url: siteUrl 
      });
    })
    .catch((error) => {
      console.error(error);

      // 如果抓取失败，去数据库查询
      fetchFromDatabase(siteUrl, res);
    });
};

// 从数据库中查找该 URL 的数据
// function fetchFromDatabase(siteUrl, res) {
//   const sql = 'SELECT title, content, logoImg FROM zc_website_all WHERE url = ?';

//   db.query(sql, [siteUrl], (err, results) => {
//     if (err) {
//       console.error('数据库查询出错:', err);
//       return res.status(500).send('服务器错误');
//     }

//     if (results.length === 0) {
//       // 如果数据库中也没有数据
//       return res.status(404).send('未找到相关数据');
//     }

//     // 返回数据库中的数据
//     const { title, content, logoImg } = results[0];
//     res.send({
//       status: 0,
//       message: '从数据库获取成功',
//       title: title || '无标题',
//       content: content || '无内容',
//       logoImg: logoImg || '',
//       url: siteUrl
//     });
//   });
// }

function fetchFromDatabase(siteUrl, res) {
  const sql = 'SELECT title, content, logoImg FROM zc_website_all WHERE url = ?';

  db.query(sql, [siteUrl], (err, results) => {
    if (err) {
      console.error('数据库查询出错:', err);
      return res.status(500).send('服务器错误');
    }

    if (results.length === 0) {
      return res.status(404).send('未找到相关数据');
    }

    const { title, content, logoImg } = results[0];

    // 假设图片文件保存在服务器的 /uploads 目录
    let logoImgUrl = logoImg;
    if (logoImg && !/^https?:\/\//i.test(logoImg)) {
      // 将文件路径转换为 URL，假设你的服务器 URL 是 http://yourserver.com
      const serverUrl = 'http://127.0.0.1/uploads/';
      logoImgUrl = `${serverUrl}${logoImg}`;
    }

    res.send({
      status: 0,
      message: '从数据库获取成功',
      title: title || '无标题',
      content: content || '无内容',
      logoImg: logoImgUrl || '',
      url: siteUrl
    });
  });
}



// exports.addWebsite = (req, res) => {
//   const categoryId = req.params.categoryId;
//   let logoImg = null;

//   if (req.file) {
//     logoImg = path.join("uploads/", req.file.filename);
//   } else if (req.body.logoImg) {
//     logoImg = req.body.logoImg;
//   }

//   const classifyInfo = {
//     ...req.body,
//     logoImg: logoImg,
//   };

//   // 查询分类所属用户的订阅类型
//   const getUserInfoSql = `
//     SELECT zc_users.subscription_type
//     FROM zc_website_category
//     JOIN zc_users ON zc_website_category.user_id = zc_users.id
//     WHERE zc_website_category.id = ?
//   `;
  
//   db.query(getUserInfoSql, [categoryId], (err, results) => {
//     if (err) return res.cc(err);

//     if (results.length === 0) return res.cc('分类不存在或用户信息缺失！');

//     const subscriptionType = results[0].subscription_type;

//     // 根据订阅类型设置数据限制
//     const maxTotalItems = subscriptionType === 'paid' ? 9999 : 50;

//     // 查询用户所有分类下的数据总数量
//     const countItemsSql = `
//       SELECT COUNT(*) AS count
//       FROM zc_website_all
//       WHERE category_id IN (
//         SELECT id
//         FROM zc_website_category
//         WHERE user_id = (
//           SELECT user_id
//           FROM zc_website_category
//           WHERE id = ?
//         )
//       )
//     `;
    
//     db.query(countItemsSql, [categoryId], (err, results) => {
//       if (err) return res.cc(err);

//       const currentItemCount = results[0].count;

//       if (currentItemCount >= maxTotalItems) {
//         return res.cc(`已达到数据添加上限（${maxTotalItems}条）！`);
//       }

//       // 插入新数据
//       const insertWebsiteSql = 'INSERT INTO zc_website_all SET ?';
      
//       db.query(insertWebsiteSql, [{ ...classifyInfo, category_id: categoryId }], (err, results) => {
//         if (err) return res.cc(err);

//         if (results.affectedRows !== 1) return res.cc("添加失败！");

//         res.cc("添加成功", 0);
//       });
//     });
//   });
// };



exports.addWebsite = (req, res) => {
  const categoryId = req.params.categoryId;
  let logoImg = null;

  if (req.file) {
    logoImg = path.join("uploads/", req.file.filename);
  } else if (req.body.logoImg) {
    logoImg = req.body.logoImg;
  }

  const classifyInfo = {
    ...req.body,
    logoImg: logoImg,
  };
console.log (classifyInfo)
  const getUserInfoSql = `
    SELECT zc_users.subscription_type
    FROM zc_website_category
    JOIN zc_users ON zc_website_category.user_id = zc_users.id
    WHERE zc_website_category.id = ?
  `;
  
  db.query(getUserInfoSql, [categoryId], (err, results) => {
    if (err) return res.cc(err);

    if (results.length === 0) return res.cc('分类不存在或用户信息缺失！');

    const subscriptionType = results[0].subscription_type;
    const maxTotalItems = subscriptionType === 'paid' ? 9999 : 50;

    const countItemsSql = `
      SELECT COUNT(*) AS count
      FROM zc_website_all
      WHERE category_id IN (
        SELECT id
        FROM zc_website_category
        WHERE user_id = (
          SELECT user_id
          FROM zc_website_category
          WHERE id = ?
        )
      )
    `;
    
    db.query(countItemsSql, [categoryId], (err, results) => {
      if (err) return res.cc(err);

      const currentItemCount = results[0].count;

      if (currentItemCount >= maxTotalItems) {
        return res.cc(`已达到数据添加上限（${maxTotalItems}条）！`);
      }

      // 查询当前最大的 sort_order
      const maxSortOrderSql = `
        SELECT MAX(sort_order) AS maxSortOrder
        FROM zc_website_all
        WHERE category_id = ?
      `;
      
      db.query(maxSortOrderSql, [categoryId], (err, results) => {
        if (err) return res.cc(err);

        const maxSortOrder = results[0].maxSortOrder || 0; // 若无数据，设为 0
        classifyInfo.sort_order = maxSortOrder + 1; // 新数据的 sort_order

        const insertWebsiteSql = 'INSERT INTO zc_website_all SET ?';
        
        db.query(insertWebsiteSql, [{ ...classifyInfo, category_id: categoryId }], (err, results) => {
          if (err) return res.cc(err);

          if (results.affectedRows !== 1) return res.cc("添加失败！");

          res.cc("添加成功", 0);
        });
      });
    });
  });
};





// 获取 - 列表
exports.getWebsiteList = (req, res) => {
  // res.send('ok')
  // 获取分类id
  const categoryId = req.params.categoryId;
  // const sql = "select * from zc_website_all WHERE category_id = ? ";
  const sql = 'SELECT * FROM zc_website_all WHERE category_id = ? ORDER BY sort_order'
  db.query(sql, [categoryId], (err, results) => {
    // 1. 执行 SQL 语句失败
    if (err) return res.cc(err);

    // 2. 执行 SQL 语句成功
    res.send({
      status: 0,
      message: "获取网站列表成功！",
      data: results,
    });
  });
};

exports.editWebsite = (req, res) => {
  let logoImg = null;

  // 判断logoImg是文件还是链接
  if (req.file) {
    // 如果是文件，上传文件
    logoImg = path.join("uploads/", req.file.filename);
  } else if (req.body.logoImg) {
    // 如果是链接，上传链接地址
    logoImg = req.body.logoImg;
  }

  const classifyInfo = {
    ...req.body,
    logoImg: logoImg
  };
  const id = req.body.id;
  const sql = `SELECT logoImg FROM zc_website_all WHERE id = ?`
  db.query(sql, [id], (err, results) => {
    if (err) return res.cc(err);
    if (results.length > 0) {
      const oldImagePath = results[0].logoImg;
      if (req.file && oldImagePath && fs.existsSync(oldImagePath)) {
        fs.unlink(oldImagePath, (err) => {
          if (err) return res.cc(err);
        });
      }
      const image = classifyInfo.logoImg || oldImagePath;
      classifyInfo.logoImg = image;

      const sql = `update zc_website_all set ? where id = ?`;
      db.query(sql, [classifyInfo, req.body.id], (err, results) => {
        if (err) return res.cc(err);
        if (results.affectedRows !== 1) return res.cc("更新失败！");
        res.cc("更新成功！", 0);
      });
    }
  });
};

exports.deleteById = (req, res) => {
  const id = req.params.id;
  const sql = `SELECT logoImg FROM zc_website_all WHERE id = ?`;
  db.query(sql, [id], (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err);
    // 如果查询到了数据
    if (results.length > 0) {

      // 获取图片路径
      console.log(results);
      // const logoImg = path.join(__dirname, results[0].logoImg )
      const imagePath = results[0].logoImg;
      console.log(imagePath);
      // if(!req.file) {
      //   if (err) return res.cc(err);
      // }

      // 删除图片文件
      if (imagePath && fs.existsSync(imagePath)) {
        fs.unlink(imagePath, (err) => {
          if (err) return res.cc(err);
          console.log("Image deleted");
          // 更新数据库中的数据
        });
        
      }
      db.query(
        `DELETE FROM zc_website_all WHERE id = ?`,
        [id],
        (err, results) => {
          if (err) return res.cc(err);
          console.log("数据删除成功");
          res.send({
            status: 0,
            message: "删除成功",
          });
        }
      );
     
     
    }
  });
};

//根据Id查询数据的处理函数
exports.getById = (req, res) => {
  const sql = `select * from zc_website_all where id=?`;

  db.query(sql, req.params.id, (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err);

    // SQL 语句执行成功，但是没有查询到任何数据
    if (results.length !== 1) return res.cc("获取数据失败！");

    // 把数据响应给客户端
    res.send({
      success: true,
      status: 0,
      message: "获取数据成功！",
      data: results[0],
    });
  });
}

exports.saveSortOrder = (req, res) => {
  try {
      const updates = req.body; // 确保这是一个数组

      console.log('请求体:', req.body);

      // 检查更新是否为空
      if (!Array.isArray(updates) || updates.length === 0) {
          return res.status(400).send({ message: '请求体格式错误，updates 为空或不是数组' });
      }

      const sql = 'UPDATE zc_website_all SET sort_order = ? WHERE id = ? AND category_id = ?';

      const updatePromises = updates.map(update => {
          return new Promise((resolve, reject) => {
              console.log('待更新的项:', update);
              console.log('参数:', [update.sort_order, update.id, update.category_id]);

              db.query(sql, [update.sort_order, update.id, update.category_id], (err, results) => {
                  if (err) {
                      console.error('SQL 执行错误:', err);
                      return reject(err);
                  }

                  console.log('更新结果:', results);
                  if (results.affectedRows === 0) {
                      console.warn(`没有找到推荐项ID为${update.id}的记录`);
                  }

                  resolve(results);
              });
          });
      });

      Promise.all(updatePromises)
          .then(() => {
              res.send({
                  status: 0,
                  message: '排序更新成功！',
              });
          })
          .catch(err => {
              console.error('更新失败', err);
              res.status(500).send({ message: '更新失败' });
          });
  } catch (error) {
      console.error('处理请求时发生错误:', error);
      res.status(500).send({ message: '服务器内部错误' });
  }
}



//这个是上线1.0正确的代码 很重要 ************
// // 发布新网站的处理函数
// exports.addWebsite = (req, res) => {
//   // 手动判断是否上传了文章封面
//   //  if (!req.file || req.file.fieldname !== 'logoImg') return res.cc('logo是必选参数')

//   const categoryId = req.params.categoryId;
//   const classifyInfo = {
//     // 标题、内容、状态、所属的分类Id
//     ...req.body,
//     // 网站logo在服务器端的存放路径
//     // logoImg: path.join( 'uploads', req.file.filename),
//     // logoImg: req.file.path
//     // logoImg: req.file ? req.file.path : null
//     logoImg: req.file ? path.join("uploads/", req.file.filename) : null,
//   };

//   console.log(req.file);
//   console.log(req.body);

//   const sql = `insert into zc_website_all set ?`;

//   // 执行 SQL 语句
//   db.query(
//     sql,
//     [{ ...classifyInfo, category_id: categoryId }],
//     (err, results) => {
//       // 执行 SQL 语句失败
//       if (err) return res.cc(err);

//       // 执行 SQL 语句成功，但是影响行数不等于 1
//       if (results.affectedRows !== 1) return res.cc("添加失败！");

//       // 发布文章成功
//       res.cc("添加成功", 0);
//     }
//   );
// };



// // 发布新网站的处理函数
// // 在这个修改后的代码中，我们首先检查req.file是否存在。
// // 如果存在，我们就假设logoImg是一个文件，并使用文件的路径。
// // 如果req.file不存在，我们就检查req.body.logoImg是否存在。
// // 如果存在，我们就假设logoImg是一个链接，并使用链接地址。如果两者都不存在，那么logoImg将为null。
// exports.addWebsite = (req, res) => {
//   const categoryId = req.params.categoryId;
//   let logoImg = null;

//   // 判断logoImg是文件还是链接
//   if (req.file) {
//     // 如果是文件，上传文件
//     logoImg = path.join("uploads/", req.file.filename);
//   } else if (req.body.logoImg) {
//     // 如果是链接，上传链接地址
//     logoImg = req.body.logoImg;
//   }

//   const classifyInfo = {
//     // 标题、内容、状态、所属的分类Id
//     ...req.body,
//     // 网站logo在服务器端的存放路径
//     logoImg: logoImg,
//   };

//   console.log(req.file);
//   console.log(req.body);

//   const sql = `insert into zc_website_all set ?`;

//   // 执行 SQL 语句
//   db.query(
//     sql,
//     [{ ...classifyInfo, category_id: categoryId }],
//     (err, results) => {
//       // 执行 SQL 语句失败
//       if (err) return res.cc(err);

//       // 执行 SQL 语句成功，但是影响行数不等于 1
//       if (results.affectedRows !== 1) return res.cc("添加失败！");

//       // 发布文章成功
//       res.cc("添加成功", 0);
//     }
//   );
// };





// 更新的处理函数
// exports.editWebsite = (req, res) => {
//   const classifyInfo = {
//     // 标题、内容、状态、所属的分类Id
//     ...req.body,
//     // 文章封面在服务器端的存放路径
//     // logoImg: path.join( 'uploads', req.file.filename),
//     // logoImg: req.file ? req.file.path : null
//     logoImg : req.file ? path.join('uploads/', req.file.filename) : null
//   };
//   console.log(req.file)
//   console.log(req.body)
//   // TODO：更新分类
//   const sql = `update zc_website_all set ? where id = ?`;
//   db.query(sql, [ classifyInfo, req.body.id], (err, results) => {
//     // 执行 SQL 语句失败
//     if (err) return res.cc(err);

//     // SQL 语句执行成功，但是影响行数不等于 1
//     if (results.affectedRows !== 1) return res.cc("更新失败！");

//     // 更新文章分类成功
//     res.cc("更新成功！", 0);
//   });
// };
// exports.editWebsite = (req, res) => {
//   const classifyInfo = {
//     // 标题、内容、状态、所属的分类Id
//     ...req.body,
//     // logo在服务器端的存放路径
//     // logoImg: path.join( 'uploads', req.file.filename),
//     // logoImg: req.file ? req.file.path : null
//     logoImg: req.file ? path.join("uploads/",req.file.filename) : null,
//   };
//   console.log(req.file);
//   console.log(req.body);
//   // TODO：更新分类
//   const id = req.body.id;
//   const sql = `SELECT logoImg FROM zc_website_all WHERE id = ?`;
//   db.query(sql, [id], (err, results) => {
//     // 执行 SQL 语句失败
//     if (err) return res.cc(err);
//     if (results.length > 0) {
//       // 获取图片路径
//       console.log(results);
     
//       // const logoImg = path.join(__dirname, results[0].logoImg )
//       const oldImagePath = results[0].logoImg;
//       console.log(oldImagePath);
//       // if(!req.file) {
//       //   if (err) return res.cc(err);
//       // }

//       // 删除图片文件
//       if (req.file && oldImagePath && fs.existsSync(oldImagePath)) {
//         fs.unlink(oldImagePath, (err) => {
//           if (err) return res.cc(err);
//           console.log("图片已删除");
//           // 更新数据库中的数据
//         });
//       }

//       const sql = `update zc_website_all set ? where id = ?`;
//       db.query(sql, [classifyInfo, req.body.id], (err, results) => {
//         // 执行 SQL 语句失败
//         if (err) return res.cc(err);

//         // SQL 语句执行成功，但是影响行数不等于 1
//         if (results.affectedRows !== 1) return res.cc("更新失败！");

//         // 更新文章分类成功
//         res.cc("更新成功！", 0);
//       });
//     }
//   });
// };

// exports.editWebsite = (req, res) => {
//   const classifyInfo = {
//     ...req.body,
//     logoImg: req.file ? path.join("uploads/", req.file.filename) : undefined,
//     // logoImg: path.join( 'uploads/', req.file.filename),
//   };
//   // if (req.file) {
//   //   classifyInfo.logoImg = path.join("uploads/", req.file.filename);
//   // }
//   const id = req.body.id;
//   const sql = `SELECT logoImg FROM zc_website_all WHERE id = ?`;
//   db.query(sql, [id], (err, results) => {
//     if (err) return res.cc(err);
//     if (results.length > 0) {
//       const oldImagePath = results[0].logoImg;
//       if (req.file && oldImagePath && fs.existsSync(oldImagePath)) {
//         fs.unlink(oldImagePath, (err) => {
//           if (err) return res.cc(err);
//         });
//       }

//       const sql = `update zc_website_all set ? where id = ?`;
//       db.query(sql, [classifyInfo, req.body.id], (err, results) => {
//         if (err) return res.cc(err);
//         if (results.affectedRows !== 1) return res.cc("更新失败！");
//         res.cc("更新成功！", 0);
//       });
//     }
//   });
// };

// //编辑数据2.0
// exports.editWebsite = (req, res) => {
//   const classifyInfo = {
//     ...req.body,
//     logoImg: req.file ? path.join("uploads/", req.file.filename) : undefined,
//   };
//   const id = req.body.id;
//   const sql = `SELECT logoImg FROM zc_website_all WHERE id = ?`
//   db.query(sql, [id], (err, results) => {
//     if (err) return res.cc(err);
//     if (results.length > 0) {
//       const oldImagePath = results[0].logoImg;
//       if (req.file && oldImagePath && fs.existsSync(oldImagePath)) {
//         fs.unlink(oldImagePath, (err) => {
//           if (err) return res.cc(err);
//         });
//       }
//       const image = classifyInfo.logoImg || oldImagePath;
//       classifyInfo.logoImg = image;

//       const sql = `update zc_website_all set ? where id = ?`;
//       db.query(sql, [classifyInfo, req.body.id], (err, results) => {
//         if (err) return res.cc(err);
//         if (results.affectedRows !== 1) return res.cc("更新失败！");
//         res.cc("更新成功！", 0);
//       });
//     }
//   });
// };

// exports.editWebsite = (req, res) => {
//   let classifyInfo = {
//     ...req.body,
//     logoImg: req.file ? path.join("uploads/", req.file.filename) : undefined,
//   };
//   const id = req.body.id;
//   const sql = `SELECT logoImg FROM zc_website_all WHERE id = ?`
//   db.query(sql, [id], (err, results) => {
//     if (err) return res.cc(err);
//     if (results.length > 0) {
//       const oldImagePath = results[0].logoImg;
//       if (req.file && oldImagePath && fs.existsSync(oldImagePath)) {
//         fs.unlink(oldImagePath, (err) => {
//           if (err) return res.cc(err);
//         });
//       }
//       const image = classifyInfo.logoImg || oldImagePath;
//       classifyInfo.logoImg = image;

//       // 如果logoImg是一个有效的URL，则使用它作为logo
//       if (isValidUrl(req.body.logoImg)) {
//         classifyInfo.logoImg = req.body.logoImg;
//       }

//       const sql = `update zc_website_all set ? where id = ?`;
//       db.query(sql, [classifyInfo, req.body.id], (err, results) => {
//         if (err) return res.cc(err);
//         if (results.affectedRows !== 1) return res.cc("更新失败！");
//         res.cc("更新成功！", 0);
//       });
//     }
//   });
// };

// // 验证URL的函数
// function isValidUrl(string) {
//   try {
//     new URL(string);
//     return true;
//   } catch (_) {
//     return false;  
//   }
// }




// 删除文章分类的处理函数

// exports.deleteById = (req, res) => {
// 	const sql = `delete from zc_website_all where id=?`

// 	db.query(sql, req.params.id, (err, results) => {
// 		// 执行 SQL 语句失败
// 		if (err) return res.cc(err)

// 		// SQL 语句执行成功，但是影响行数不等于 1
// 		if (results.affectedRows !== 1) return res.cc('删除失败！')

// 		// 删除文章分类成功
// 		res.cc('删除成功！', 0)
// 	})
// }


